package com.chenfan.mcn.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chenfan.mcn.dao.StarRebateContractMapper;
import com.chenfan.common.extension.mybatisplus.enhanced.EnhancedService;
import com.chenfan.mcn.model.StarRebateContract;
import com.chenfan.mcn.model.rpc.ChargeClearCallback;
import com.chenfan.mcn.model.vo.StarRebateExcutionOrderExportVO;
import com.chenfan.mcn.model.dto.StarRebateContractSaveDTO;
import com.chenfan.mcn.model.dto.StarRebateContractSearchDTO;
import com.chenfan.mcn.model.dto.RelatedExcutionOrderInputDTO;
import com.chenfan.mcn.model.vo.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * <p>
 * 红人返点合同 服务类
 * </p>
 *
 * @author wulg
 * @since 2021-11-16
 */
public interface StarRebateContractService extends EnhancedService<StarRebateContractMapper, StarRebateContract> {

    /**
     * 新增收入合同
     *
     * @param saveDTO
     * @return Integer
     */
    Long insertContract(StarRebateContractSaveDTO saveDTO);

    /**
     * 修改收入合同
     *
     * @param saveDTO
     * @return Integer
     */
    Long updateContract(StarRebateContractSaveDTO saveDTO);


    /**
     * 红人返点合同-分页
     * @param searchDTO
     * @return StarRebateContractListVO
     */
    Page<StarRebateContractListVO> getContractPage(StarRebateContractSearchDTO searchDTO);

    /**
     * 红人返点合同-详情
     * @param id
     * @return
     */
    StarRebateContractDetailVO getContractDetail(Long id);

    /**
     * 红人返点合同-获取导出数据
     * @param searchDTO
     * @return
     */
    List<StarRebateContractExportVO> getExportData(StarRebateContractSearchDTO searchDTO);


    /**
     * 红人返点合同-导出执行单
     * @param id
     * @return
     */
    List<StarRebateExcutionOrderExportVO> getExportExcutionOrders(Long id);


    /**
     * 导入Excel-财务批量审批&复核
     *
     * @param inputList {@link List<   RelatedExcutionOrderInputDTO   >}
     * @return String
     */
    List<StarRebateExcutionOrderVO> importExcel(List<RelatedExcutionOrderInputDTO> inputList);


    /**
     * 下载失败原因
     *
     * @param response {@link HttpServletResponse}
     * @param fileId
     */
    void excelDownload(HttpServletResponse response, String fileId);

    /**
     * 红人返点合同-修改单据状态
     *
     * @param id {@link Long}
     * @param approvalStatus   {@link Integer}
     * @return {@link Boolean}
     */
    boolean changeStatus(Long id, Integer approvalStatus);

    /**
     * 根据合同编号获取红人返点合同
     * @param contractCode
     * @param tenantId
     * @return StarRebateContract
     */
    StarRebateContract getByCode(String contractCode, Long tenantId);

    /**
     * 核销后回款回调
     *
     * @param dto          回款报文
     * @param contractId 收入合同ID
     * @return
     */
    boolean updatePayback(ChargeClearCallback dto, Long contractId);

}
